#include "widget.h"
#include <QPushButton>
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    this->resize(500, 300);

    // 点击min按钮，让窗口最小化
    QPushButton* min = new QPushButton("最小化", this);
    min->move(30, 30);
    // 参数1：发射信号的部件
    // 参数2：发射信号的类型（信号函数的地址）
    // 参数3：响应该信号的部件
    // 参数4：用来处理该信号的槽函数（槽函数的地址）
    connect(min, &QPushButton::clicked, this, &QWidget::showMinimized);

    // 当max按下时，让窗口最大化
    QPushButton* max = new QPushButton("最大化", this);
    max->move(130, 30);
     connect(max, &QPushButton::pressed, this, &QWidget::showMaximized);

    // 点击close按钮后，释放鼠标按键时关闭窗口
    QPushButton* close = new QPushButton("关闭", this);
    close->move(230, 30);
    connect(close, &QPushButton::released, this, &QWidget::close);

    QPushButton* normal = new QPushButton("恢复", this);
    normal->move(330, 30);
    connect(normal, &QPushButton::clicked, this, &QWidget::showNormal);


    // 自定义槽函数
    QPushButton* btn1 = new QPushButton("自定义槽", this);
    btn1->move(30, 100);
    // 点击 btn1 时，在控制台输出“ Hello World ”
    // 点击 btn1 时，执行 response 函数
    connect(btn1, &QPushButton::clicked, this, &Widget::response);

    // lambda表达式
    QPushButton* btn2 = new QPushButton("lambda", this);
    btn2->move(130, 100);
    // 使用lambda表达式时，可以省略参数3
    // 只要 btn2 发射了pressed信号，lambda表达式就直接处理
    connect(btn2, &QPushButton::pressed, [](){
        qDebug() << "大头娃娃真厉害";
    });
}

void Widget::response()
{
    int a = 10;
    int b = 20;
    qDebug() << "Hello World" << (a + b);
}

Widget::~Widget()
{

}
